import { getMenuRouter } from '@/utils/api.js'
import { ElMessage } from 'element-plus'

/* 菜单处理函数
   即从后端获取菜单，进行格式转换后，存到本地存储中
     （1）menuTree：左侧菜单数据
     （2）menuList: 按钮权限数据
*/
const handleMenu = (router) => {
  getMenuRouter().then((res) => {
    if (res.code === 200) {
      let menuTree = []
      // 1.把后台返回的菜单，处理成标准的菜单树
      if (res.result.data.length > 0) {
        // 1.1 子菜单列表（即parent不为null）
        let childrenList = res.result.data.filter((item) => item.parent && item.visible === 1)
        // 1.2 父菜单列表（即parent为null）
        let parentList = res.result.data.filter((item) => !item.parent && item.visible === 1)
        // 1.3 对父菜单进行循环
        if (parentList.length > 0) {
          parentList.forEach((item) => {
            let menuTreeChildren = []
            // 1.3.1 该父菜单对应的所有子菜单列表
            let children = childrenList.filter((itema) => itema.parent === item.id)
            // 1.3.2 对该父菜的所有子菜单遍历，压到menuTreeChildren中
            children.forEach((itemb) => {
              menuTreeChildren.push({
                text: itemb.name,
                id: itemb.id,
                attributes: {
                  url: itemb.web_path,
                  icon: itemb.icon,
                },
                hasChildren: false,
                hasParent: true,
              })
            })
            // 1.3.3 把父菜单压入到menuTree菜单树中
            menuTree.push({
              text: item.name,
              id: item.id,
              attributes: {
                url: item.web_path,
                icon: item.icon,
              },
              hasChildren: children.length > 0,
              hasParent: false,
              children: menuTreeChildren,
            })
            // 1.3.4 父菜单对象添加children属性，并关联上它的children列表
            // item.children = [...children]
          })
        }

        // 1.4 操作权限管控数组
        let menuList = []
        // 1.4.1 把所有的菜单(名称/url/权限三项)，压到menuList列表中
        res.result.data.forEach((item) => {
          menuList.push({
            url: item.web_path,
            moduleName: item.name,
            menuPermission: item.menuPermission,
          })
        })
        // 1.4.2 menuList保存到localStorage中
        localStorage.setItem('menuList', JSON.stringify(menuList))
      }

      // 2.menuTree保存到localStorage中
      localStorage.setItem('menuTree', JSON.stringify(menuTree))

      // 3.跳转到主页
      router.replace({
        path: '/',
      })
    } else {
      ElMessage.warning(res.msg)
    }
  })
}

export { handleMenu }
